
#include<bits/stdc++.h>

using namespace std;

/**
 * @brief 检查字符串中的括号是否匹配
 *
 * 该函数接收一个字符串作为输入，检查字符串中的括号是否匹配。
 * 支持的括号类型包括圆括号 '()'、方括号 '[]' 和花括号 '{}'。
 *
 * @param w 待检查的字符串
 * @return 如果括号匹配，返回 true；否则返回 false
 */
bool check(string w) {
    // 创建一个字符栈，用于存储左括号
    stack<char> s;
    // 遍历字符串中的每个字符
    for (auto c: w) {
        // 如果字符是左括号，则将其压入栈中
        if ( c == '(' || c == '[' || c == '{' ) {
            s.push(c);
        }
            // 如果字符是右括号 ')'
        else if ( c == ')' ) {
            // 如果栈为空或者栈顶元素不是 '('，则括号不匹配
            if ( s.empty() || s.top() != '(' ) {
                return false;
            }
            // 弹出栈顶元素
            s.pop();
        }
            // 如果字符是右括号 ']'
        else if ( c == ']' ) {
            // 如果栈为空或者栈顶元素不是 '['，则括号不匹配
            if ( s.empty() || s.top() != '[' ) {
                return false;
            }
            // 弹出栈顶元素
            s.pop();
        }
            // 如果字符是右括号 '}'
        else if ( c == '}' ) {
            // 如果栈为空或者栈顶元素不是 '{'，则括号不匹配
            if ( s.empty() || s.top() != '{' ) {
                return false;
            }
            // 弹出栈顶元素
            s.pop();
        }

    }
    // 如果栈为空，则所有括号都匹配
    return s.empty();
}


int main() {
    string word;
    while (cin >> word) {
        if ( check(word)) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }
    return 0;
}